<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        //for循环 模拟 实现 some 和 every

        // const arr = [false, false, true, true];
        //every 全部都符合条件    返回布尔值
        // let res = arr.every((item, key, arr) => {
        //     console.log(item, key, arr);
        //     return item;
        // })
        // console.log(res);

        //some 至少一个符合条件    返回布尔值
        // let res1=arr.some((item,key,arr)=>{
        //     console.log(item,key,arr);
        //     return item;
        // })
        // console.log(res1);


        // reduce  累加器 

        /* 数字的累加 */
        // let arr = [1, 2, 3, 4];
        //参数  pre 上次累加结果    current 当前循环的值  index 索引
        // 0 是初始累加的值

        // let res = arr.reduce((pre, current, index) => {
        //     console.log(pre, current, index);
        //     return pre += current
        // }, 0)
        // console.log(res);

        /* 数组的累加操作 */
        // let arr = [1, 2, 3, 4];
        // let res = arr.reduce((pre, current, index) => {
        //     pre.push(current);
        //     return pre;
        // }, []);
        // console.log(res);


        /* 对象的累加 */
        // let arr = [1, 2, 3, 4];
        // let res = arr.reduce((pre, current, index) => {
        //     pre[current] = 1;
        //     return pre;
        // }, {})
        // console.log(res);//{1: 1, 2: 1, 3: 1, 4: 1}



        /* 通过reduce给数组去重 */
        // let arr = [1, 2, 1, 3, 2, 4, 3, 5, 5];
        // let res = arr.reduce((pre, current, index) => {
        //     pre.indexOf(current) === -1 ? pre.push(current) : null;
        //     return pre;
        // }, [])
        // console.log(res);

        /* 
        第一次： 初始值  []  ---> pre = [] -----> current = 1 ---->  pre.indexOf(current) ===-1  pre = [1]
        第二次： pre = [1] ---- current  2   --->pre.indexOf(current) === -1  pre = [1,2]
        第三次： pre = [1,2] --- > current = 1 ----->pre.indexOf(current) === 0 pre= [1,2];
        第四次： pre = [1,2] ---- current  3   --->pre.indexOf(current) === -1  pre = [1,2,3]

        */

        /* 数组去重 原生方法 */
        var arr = [1, 2, 2, 3, 2, 4, 3, 5];

        //通过对象键名不重复特性去重
        var obj = {};
        for (var i = 0; i < arr.length; i++) {
            obj[arr[i]] = 1;
        }
        console.log(obj);

        var newarr = [];
        for (var key in obj) {
            newarr.push(parseInt(key));
        }
        console.log(newarr);



        /* 字符串去重 */
        // let str = "abcabccaaa";
        // let arr = [];
        // for (let i = 0; i < str.length; i++) {
        //     arr.push(str[i])
        // }
        // console.log(arr); //['a', 'b', 'c', 'a', 'b', 'c', 'c', 'a', 'a', 'a']

        // let res = arr.reduce((pre, current) => {
        //     //判断current :a b c 存在不存在,如果存在,初始化一个 a:1 b:1 c:1
        //     typeof pre[current] === "undefined" ? pre[current] = 1 : pre[current]++;
        //     return pre;
        // }, {});
        // console.log(res);

        // 通过for循环来统计字符出现的次数。
        // var str = "abcabccaaa";
        // var obj = {};
        // for(var i=0;i<str.length;i++){
        //     // 判断obj里有没有 字符的键名 如果没有 就初始化为 1 ，如果有 就在这个基础上加一；
        //     if(typeof obj[str[i]]=== "undefined"){
        //         obj[str[i]] = 1;
        //     }else{
        //         obj[str[i]]++
        //     }
        // }

        // console.log(obj);
    </script>
</body>

</html>